#include "table.h"

/**
 * 一次归并算法
 * @param {table} *tabs     待归并的两个有序表
 * @param {table} *tabg     归并后的有序表
 * @param {int} u           有序表的长度
 * @param {int} m           有序表的长度
 * @param {int} v           有序表的长度
 * @return {void}
 */
void merge(table *tabs, table *tabg, int u, int m, int v) {
    int i, j, k, t;
    i = u;
    j = m + 1;
    k = u;

    while (i <= m && j <= v)
    {
        if(tabs -> r[i].key <= tabs -> r[j].key)
        {
            tabg -> r[k] = tabs -> r[i];
            i++;
        }
        else
        {
            tabg -> r[k] = tabs -> r[j];
            j++;
        }
    }

    if(i <= m)
    {
        for (t = i; t <= m; t++)
        {
            tabg -> r[k + t - i] = tabs -> r[t];
        }
    } else {
        for (t = j; t <= v; t++)
        {
            tabg -> r[k + t - j] = tabs -> r[t];
        }
    }
    
}

int main() {
    table tabs, tabg;
    int i;

    int arr[] = {0, 49, 38, 65, 97, 76, 13, 27, 49};

    tabs.length = 8;
    tabg.length = 8;

    for (i = 1; i <= 8; i++)
    {
        tabs.r[i].key = arr[i];
    }

    merge(&tabs, &tabg, 1, 4, 8);

    for (i = 1; i <= 8; i++)
    {
        printf("%d ", tabg.r[i].key);
    }
    
    return 0;
}